class Watcher {
  // 参数1:vue实例
  // 参数2:订阅者要订阅的数据
  // 参数3:发生变化时候订阅者要执行的回调函数
  constructor (vm, key, callback) {
    // 存储传入的三个数据
    this.vm = vm
    this.key = key
    this.cb = callback
    // 在订阅者创建的时候把自己设置给 Dep 类的属性
    Dep.watcher = this
    // 在初始化订阅者的时候获取一下当前的初始值
    this.oldValue = vm[key]
    // 最后清除Dep中刚设置的订阅者属性
    Dep.watcher = null
  }
  // 数据发生变化方法
  updata () {
    // 如果新数据和旧数据完全一样，那么直接返回不管了
    if (this.vm[this.key] === this.oldValue) return
    // 如果不一样，执行回调函数并把新值带进去
    this.cb(this.vm[this.key])
  }
}